//
//  UIView+MyBackgroundColorView.m
//  RunTimeDemo
//
//  Created by YYPan on 2018/5/24.
//  Copyright © 2018年 YYPan. All rights reserved.
//

#import "UIView+MyBackgroundColorView.h"
#import <objc/runtime.h>

@implementation UIView (MyBackgroundColorView)

+ (void)load
{
	static dispatch_once_t onceToken;
	dispatch_once(&onceToken, ^{
		
		Class class = [self class];
		// objc_getClass([self class]); 替换类方法
		// [self class]; 替换实例方法
		
		// 系统原本的设置背景颜色的方法
		Method originalMethod = class_getInstanceMethod(class, @selector(setBackgroundColor:));
		
		// 自定义的设置背景颜色的方法
		Method myMethod = class_getInstanceMethod(class, @selector(yyp_setBackgroundColor:));
		
		// 给原方法添加实现,预防原方法没有实现
		BOOL addMethod = class_addMethod(class, @selector(setBackgroundColor:), method_getImplementation(myMethod), method_getTypeEncoding(myMethod));
		
		if (addMethod) {
			// 将原方法实现替换到交换方法的实现
			class_replaceMethod(class, @selector(yyp_setBackgroundColor:), method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
		} else {
			// 原方法已经实现,直接交换两个方法
			method_exchangeImplementations(originalMethod, myMethod);
		}
	});
}

- (void)yyp_setBackgroundColor:(UIColor *)color
{
	[self yyp_setBackgroundColor:color];
}

@end
